﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;

namespace chatblog
{
    /// <summary>
    /// 存储聊天记录的数据结构
    /// </summary>
    public class CommonChatRoomCache
    {
        #region 静态属性
        /// <summary>
        /// 发送系统信息的用户ID
        /// </summary>
        public static string SystemInfoUserID = "系统消息";

        /// <summary>
        /// 是否需要时刻保存聊天记录信息
        /// </summary>
        public static bool SaveChatInfo = true;

        public static string ChatRoomTableName = "ChatRoom";

        public static string ChatInfoTableName = "ChatInfo";

        public static string ChatUserTableName = "ChatUser";

        public static string DefaultGroupName = "在线用户";

        public static string DefaultGroupID = "0";
        #endregion  

        #region 构造函数
        /// <summary>
        /// 构造函数
        /// </summary>
        public CommonChatRoomCache()
        {
            InitData();
        }
        #endregion

        #region 属性
        private static  DataSet dataSetCache;
        /// <summary>
        /// 获取 所有表的数据集合
        /// </summary>
        public static  DataSet DataSetCache
        {
            get
            {
                if (dataSetCache == null)
                {
                    InitData();
                }
                return dataSetCache;
            }
        }

        /// <summary>
        /// 获取聊天室数据表
        /// </summary>
        public static  DataTable ChatRoomTable
        {
            get
            {
                return DataSetCache.Tables[ChatRoomTableName];
            }
        }

        /// <summary>
        /// 获取聊天记录数据表
        /// </summary>
        public static DataTable ChatInfoTable
        {
            get
            {
                return DataSetCache.Tables[ChatInfoTableName];
            }
        }

        /// <summary>
        /// 获取聊天用户数据表
        /// </summary>
        public static  DataTable ChatUserTable
        {
            get
            {
                return DataSetCache.Tables[ChatUserTableName];
            }
        }
        #endregion

        #region 方法
        /// <summary>
        /// 初始化数据
        /// </summary>
        public static  void InitData()
        {
            dataSetCache = new DataSet();

            DataTable chatUserTable = new DataTable(ChatUserTableName);
            chatUserTable.Columns.Add("UserID", typeof(string));           //用户ID ，不唯一 ，和聊天室ID一起构成联合主键
            chatUserTable.Columns.Add("RoomID", typeof(string));           //用户当前的聊天室ID，不唯一，和用户ID一起构成联合主键
            chatUserTable.Columns.Add("LastestChatInfoID", typeof(Int64));//用户读取过的最后一条聊天信息的ID
            chatUserTable.Columns.Add("NickName", typeof(string));        //用户在聊天室中的昵称
            chatUserTable.Columns.Add("StartTime", typeof(DateTime));     //用户进入聊天室的时间
            dataSetCache.Tables.Add(chatUserTable);

            DataTable chatInfoTable = new DataTable(ChatInfoTableName);
            chatInfoTable.Columns.Add("ChatInfoID", typeof(Int64 ));      //聊天信息ID ，唯一
            chatInfoTable.Columns.Add("UserFrom", typeof(string));        //聊天信息发送的用户
            chatInfoTable.Columns.Add("SendTime", typeof(DateTime));      //聊天信息的发送时间
            chatInfoTable.Columns.Add("ChatContent", typeof(string));     //聊天信息的内容
            chatInfoTable.Columns.Add("RoomID",typeof (string));          //聊天室ID
            dataSetCache.Tables.Add(chatInfoTable);

            //RoomType和RoomID都是唯一的
            DataTable chatRoomTable = new DataTable(ChatRoomTableName);
            chatRoomTable.Columns.Add("RoomID", typeof(string));    //聊天室ID ，唯一
            chatRoomTable.Columns.Add("RoomType", typeof(string));  //聊天室类型，唯一 ,Request[ParamID]
            chatRoomTable.Columns.Add("CreatedBy", typeof(string)); //创建聊天室的用户ID，第一个打开该聊天室的用户
            chatRoomTable.Columns.Add("CreatedTime", typeof(DateTime));  //创建聊天室的时间
            chatRoomTable.Columns.Add("RoomName", typeof(string));       //聊天室的名称  
            chatRoomTable.Columns.Add("LastestChatInfoID", typeof(Int64));//用户读取过的最后一条聊天信息的ID
            dataSetCache.Tables.Add(chatRoomTable);
        }
        #endregion

        #region 辅助方法
        public static string GetNewRoomID()
        {
            return Guid.NewGuid().ToString("N");
        }
        public static Int64  GetNewChatInfoID()
        {
            return RuleCode.Common.Util.GetRecID();
        }

        public static int GetRoomUserCount(string recid)
        {
            int count = 0;
            DataRow[] dRows =CommonChatRoomCache.ChatRoomTable.Select("RoomType='"+recid +"'");
            if (dRows.Length > 0)
            {
                DataRow[] userRows = ChatUserTable.Select("RoomID='"+dRows [0]["RoomID"].ToString ()+"'");
                if (userRows.Length > 0)
                    count = userRows.Length;
            }
            return count;
        }

        public static string GetNickNameFromUserID(string userid)
        {
            string nickname = userid;
            DataRow[] userRows = ChatUserTable.Select("UserID='"+userid +"'");
            if (userRows.Length > 0)
                nickname = userRows[0]["NickName"].ToString();
            return nickname;
        }
        #endregion
    }


    public struct cbChatRoom_Struct
    {
        /// <summary>
        /// 获取或设置聊天室发起人
        /// </summary>
        public string user_to { get; set; }

        /// <summary>
        /// 获取或设置聊天室接收人
        /// </summary>
        public string user_from { get; set; }

        /// <summary>
        /// 获取或设置 聊天室打开时间
        /// </summary>
        public DateTime  openTime { get; set; }

        /// <summary>
        /// 获取或设置聊天室 打开的地址信息（ip,hostname）
        /// </summary>
        public string chatAddress { get; set; }
    }                         
}
